package pedidos;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Stack;

import miEmpresa.Deposito;

public class Generador
{
	// Instancia
	private Instancia instancia;
	
	// Cantidad de ciudades
	private int n;
	
	// Pila de pedidos
	private Stack<Pedido> p;
	
	public Pedido pedido;
	
	// Deposito de la empresa
	private Deposito deposito;
	
	// El constructor toma la cantidad de ciudades
	public Generador(Instancia inst, Deposito deposito)
	{
		instancia = inst;
		n = instancia.cantidadPedidos();
		this.deposito = deposito;
	}
	
	// Genera todos los recorridos
	public LinkedList<Recorrido> generar()
	{
		LinkedList<Recorrido> ret = new LinkedList<Recorrido>();
		
		Recorrido recorrido = new Recorrido(instancia);
		recorrido.agregar((Pedido) instancia.getPartida());  //ACÁ TIENE QUE TOMAR UN PEDIDO PERO TIENE QUE SER DEL DEPOSITO DEL LOCAL PARA TOMAR SU COORDENADA!!!
		
		completar(recorrido, ret);
		return ret;
	}

	// Proceso recursivo
	private void completar(Recorrido recorrido, LinkedList<Recorrido> ret)
	{
		// Caso base: El recorrido contiene todas las ciudades
		if( recorrido.size() == n)
		{
			ret.add(recorrido.clonar());
			return;
		}

		// Caso recursivo: Agrego todas las posibles ciudades al recorrido
		for(Pedido pedido: instancia.get())
		{
			if(!recorrido.contiene(pedido))
			{	
				recorrido.agregar(pedido);
				completar(recorrido, ret);
				recorrido.eliminarUltima(); // La ultima es la i
			}
		}
	}

	
}